<?php

/**
 * 防水墙相关接口调用
 * Date: 2020/03/10
 */

namespace Lib\Paas;

use Lib\Base\Validate;

class WaterWall extends Base
{
    public function __construct($sData = [])
    {
        parent::__construct($sData);
    }

    /**
     *
     * 查询用户安全等级
     *
     * @param int $waterwallAppId  当前服务AppID，每个活动都需要产品单独申请
     * @param string $waterwallAppKey  当前服务的密钥，每个活动都需要产品单独申请
     * @return array
     * [
     *      'iRet' => '0-成功，其他-失败',
     *      'sMsg' => '错误消息',
     *      'data' => [
     *          'fs_retcode' => '0=验证成功, 其他-验证失败 ',
     *          'fs_level' => '防水墙恶意级别（0-4），详细释义见下方',
     *          'fs_riskType' => '防水墙恶意标签'
     *      ]
     * ]
     * fs_level可能值：0-4
     *   恶意等级    风险    正常占比      常见情况
     *   0          无风险    70%±10%    无明显恶意行为或恶意历史
     *   1         轻微风险   12%±5%     轻微风险特征异常，如 IP 属性异常、批量操作等。
     *   2          低风险    7%±5%      风险特征异常，如高危 IP、严重批量操作等。
     *   3          中风险    5%±5%      具有较明显的恶意特征，如黄牛党ID、涉黑灰产等。
     *   4          高风险    6%±5%      具有明显的恶意特征，如猫池号、黑产ID、业务黑名单等。

     */
    public function getUserSecurityLevel(int $waterwallAppId, string $waterwallAppKey): array
    {
        if (!Validate::checkNaturalNum($waterwallAppId)) {
            return $this->getRetData('-1', '服务appid必须为整数！');
        }

        if ($waterwallAppKey == '') {
            return $this->getRetData('-2', '服务秘钥AppKey不能为空！');
        }

        $queryData = [
            'waterwallAppId' => $waterwallAppId,
            'waterwallAppKey' => $waterwallAppKey,
        ];

        //url
        $url = $this->getPaasRequestUrl('gamesafe.waterwall', $queryData);
        $res = $this->http->get($url);
        recordLog('防水墙查询用户安全等级接口返回数据：' . var_export($res, true), __FILE__, __LINE__);

        if ($res['ret'] != '0') {
            $this->tglogReport('框架请求ULink-Paas出现异常，curl_errno：' . $res['ret'] . '，curl_error：' . $res['msg'], 'gamesafe.waterwall');
            recordLog('调用ULink Paas防水墙查询用户安全等级接口！', __FILE__, __LINE__, LP_ERROR);
            return $this->getRetData('-3', '系统繁忙，请稍后再试！');
        }
        $res = $res['data']; //paas接口实际返回值
        if ($res['ret'] != '0') {
            return $this->getRetData('-4', $res['msg']);
        }
        if ($res['data']['fs_retcode'] != '0') {
            return $this->getRetData('-5', '系统繁忙，请稍后再试！');
        }

        return $this->getRetData('0', 'success', ['data' => $res['data']]);
    }
}
